#ifndef VEC2I
#define VEC2I

#define ROUND(value) (int) (value > 0 ? (value + 0.5) : (value - 0.5))
struct vec2i {

  int x;
  int y;

  vec2i() : x(0), y(0) {
  }

  vec2i(int _x, int _y) : x(_x), y(_y) {
  }

  vec2i operator-(vec2i b) {
    return vec2i(x - b.x, y - b.y);
  }

  vec2i operator-(const int value) {
    return vec2i(x - value, y - value);
  }

  vec2i operator+(const int value) {
    return vec2i(x + value, y + value);
  }

  vec2i operator+(const vec2i b) {
    return vec2i(x + b.x, y + b.y);
  }

  vec2i operator*(const vec2i b) {
    return vec2i(x * b.x, y * b.y);
  }

  vec2i operator%(const int value) {
    return vec2i(x % value, y % value);
  }

  vec2i operator/(const int value) {
    return vec2i(x / value, y / value);
  }

  vec2i operator/(const vec2i b) {
    return vec2i(x / b.x, y / b.y);
  }

  vec2i operator*(const int value) {
    return vec2i(x * value, y * value);
  }

  int &operator[](int index) {
    if (index == 0) return x;
    else return y;
  }

  bool operator==(vec2i b) {
    return (x == b.x && y == b.y);
  }

  bool operator!=(vec2i b) {
    return !(x == b.x && y == b.y);
  }
};

#endif